1. Technical Field
The present disclosure relates to clustered storage systems and, more specifically, to an organization of data and parity information in one or more Redundant Array of Independent Disks (RAID) groups within a clustered storage system.
2. Background Information
A storage system typically includes one or more storage devices, such as solid state drives (SSDs) embodied as flash storage devices, into which information may be entered, and from which the information may be obtained, as desired. The storage system may organize the storage devices into one or more Redundant Array of Independent Disks (RAID) groups, each having storage space on the devices dedicated to storing data and parity (i.e., redundant) information. The storage system may further implement a high-level module, such as a file system, to logically organize the information stored on the devices as storage containers such as, inter alia, files or logical units (LUNs). Typically, a storage container may be housed (stored) within a RAID group to reduce the parity overhead and enable efficient allocation of parity storage in the group.
For example, assume three storage containers are formed from a set of 24 SSDs. The SSDs are then divided into three RAID groups of 8 SSDs, i.e., one for each of the three storage containers. If double parity protection is employed for each RAID group (i.e., a 6+2 RAID configuration), then the equivalent storage space of at least two SSDs from each RAID group is dedicated to storing parity (i.e., redundancy) information resulting in a parity ratio of 2/8 (=25%). This is inefficient as compared to using a single RAID group to store all three containers, which results in a parity ratio of 2/24 (=8.3%) for a 22+2 RAID configuration.
Such inefficient allocation of parity storage for RAID groups may arise in a clustered storage system (cluster) having, e.g., a high availability (i.e., failover) arrangement configured to service a number of storage containers. When a node (i.e., storage system) of the cluster fails, the failed node's storage containers may be distributed to the remaining (i.e., surviving) nodes, which takeover servicing of those containers. However, this arrangement usually requires additional RAID groups, i.e., at least one RAID group for each storage container originally serviced by the failed node, because each container may be owned (i.e., serviced) by only one node at a time. Accordingly, each storage container may be stored in a RAID group, so that the container may be distributed to another (i.e., surviving) node in the event of a node failure.
As a further example, assume a 4-node cluster arrangement having 24 SSDs, where each node serves three storage containers (i.e., 12 containers in the cluster) and one node fails resulting in three surviving nodes. The three storage containers from the failed node may then be distributed to the surviving nodes, i.e., one container from the failed node to each of the three surviving nodes. Since each storage container is stored in a RAID group, this arrangement requires that the storage containers be divided among 12 separate RAID groups. Therefore, the 24 SSDs are divided into 12 RAID groups, e.g., two SSDs per RAID group in a 1+1 RAID configuration (i.e., mirror) having a 1/2 (=50%) parity ratio. Moreover, if double parity is desired (e.g., at a minimum three SSDs per RAID group in a 1+2 RAID configuration), then at least 36 SSDs are needed (3×12) to house the 12 storage containers, resulting in a substantially high, 2/3 (≈67%) parity ratio.
Accordingly, there is a need to organize RAID groups and storage containers of a cluster, so as to reduce the parity overhead of the RAID groups, as well as to facilitate distribution and service of the containers among surviving nodes when one or more nodes of the cluster fail.